package com.demo.java.OD101_150.OD119;

import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【敏感字段加密】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145716046
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            // 创建一个 Scanner 对象用于接收用户输入
            Scanner scan = new Scanner(System.in);

            // 读取第一个输入值 k，表示处理的命令数量
            int k = Integer.parseInt(scan.nextLine());

            // 如果 k 小于 0，输出错误信息并终止程序
            if (k < 0) {
                System.out.println("ERROR");
                return;
            }

            // 读取第二行输入的字符串 s
            String s = scan.nextLine();

            // 如果字符串 s 为空或长度超过 127，输出错误信息并终止程序
            if (s == null || s.length() == 0 || s.length() > 127) {
                System.out.println("ERROR");
                return;
            }

            // 创建一个 LinkedList 用来存储所有的命令
            List<String> cmdList = new LinkedList<>();

            // 将输入字符串 s 转换为字符数组，以便逐个字符处理
            char[] chs = s.toCharArray();

            // 遍历字符串中的每个字符
            for (int j = 0; j < s.length(); ++j) {
                char c = chs[j];
                String cmd = "";

                // 如果当前字符是双引号，表示命令是一个包含空格的字符串
                if ('"' == c) {
                    // 查找匹配的结束双引号
                    int index = s.indexOf('"', j + 1);
                    // 提取双引号中的命令部分
                    cmd = s.substring(j, index + 1);
                    // 更新 j 为下一个字符的位置
                    j = index + 1;
                } else {
                    // 如果当前字符不是双引号，则查找下一个下划线（_）
                    int index_ = s.indexOf('_', j);
                    // 如果找到了下划线，表示命令以下划线分隔
                    if (-1 != index_) {
                        cmd = s.substring(j, index_);
                        j = index_;  // 更新 j 为下划线的位置
                    } else {
                        // 如果没有找到下划线，表示这是最后一个命令
                        cmd = s.substring(j);
                        j = s.length();  // 更新 j 为字符串的最后位置
                    }
                }

                // 如果提取到的命令非空，则添加到命令列表中
                if (!"".equals(cmd)) {
                    cmdList.add(cmd);
                }
            }

            // 如果命令列表的大小大于 k，则替换第 k 个命令为 "******"
            if (cmdList.size() > k) {
                cmdList.set(k, "******");

                // 使用 StringBuilder 构建输出字符串
                StringBuilder sb = new StringBuilder();

                // 将命令列表中的每个命令按顺序拼接，命令之间用下划线分隔
                cmdList.forEach(x -> sb.append(x).append("_"));

                // 去掉最后一个多余的下划线
                String result = sb.substring(0, sb.length() - 1);

                // 输出最终的字符串结果
                System.out.print(result);
            } else {
                // 如果命令数量小于等于 k，输出错误信息
                System.out.print("ERROR");
            }
        } catch (Exception e) {
            // 捕获异常并输出错误信息
            e.printStackTrace();
            System.out.println("ERROR");
            System.out.println("input error");
        }
    }
}
